TUTORIAL SIX
Adding A Gun

It would be a very short shooter game if our player did not have a gun, and bullets to fire. In traditional first person style, the gun protrudes from the base of the screen and the bullets fire into a crosshair fixed to the center of the screen.



The first step is to load all the models, sounds and images we will need to create the visual effect. We must load a gun model, some appropriate sounds, some sniper music and a crosshair for the screen:

rem TUT6A
rem Load model for gun
GunObj=2 : load object "models\gun\gun.x",GunObj

rem Load all sounds
GunSnd=1 : load sound "sounds\gun.wav",GunSnd
ImpactSnd=2 : load 3dsound "sounds\impact.wav",ImpactSnd
DieSnd=3 : load sound "sounds\die.wav",DieSnd

rem Load music (WAV best for looping)
MusicSnd=101 : load sound "sounds\ingame.wav",MusicSnd
loop sound MusicSnd : set sound volume MusicSnd,80

rem Load images
FireImg=1 : load image "images\fire.bmp",FireImg
CrossHairImg=2 : load image "images\crosshair.bmp",CrossHairImg
Once the media has been loaded, we can setup the objects before the game begins. The gun needs to be locked to the screen as it is part of the player camera now. We also need to create a bullet object and the crosshair for the screen:

rem TUT6B
rem Setup gun for player
lock object on GunObj
scale object GunObj,2,2,4
rotate object GunObj,270,0,0
position object GunObj,0.5,-1,2
disable object zdepth GunObj

rem Create object for bullet
BulletObj=3 : make object cube BulletObj,0.1

rem Create simple sprite based crosshair
sprite 1,320-16,240-16,CrossHairImg
set sprite 1,0,1
When the user presses the mouse button, the gun must be fired. In firing the gun we must first make sure the gun has cooled down enough to allow another shot. This is a storyline to cover for a technical limitation as our tutorial game allows only one bullet to be fired at any one time. When the gun is fired, a sound is played and the bullet is created at the players position and rotated to face the target:

rem TUT6C
rem Control gun firing
if mouseclick()=1 and bullet=-50
 bullet=100
 play sound GunSnd
 position object BulletObj,camera position x(0),camera position y(0),camera position z(0)
 rotate object BulletObj,camera angle x(0),camera angle y(0),0
 set bsp object collision 2,BulletObj,0.1,1
 move object BulletObj,0.2
endif
During the life of the bullet, we must move it forward and ensure it is destroyed when it hits a wall. We use the built in BSP collision setup in the previous code segment to make this task simple:

rem TUT6D
rem Control life of bullet
if bullet>0

 rem If bullet collides with BSP world
 if bsp collision hit(2)=1 or bulletimpact=1
  rem End bullet on wall
  position sound ImpactSnd,object position x(BulletObj), object position y(BulletObj), object position z(BulletObj)
  play sound ImpactSnd
  bulletimpact=0
  bullet=0
 else
  rem Move bullet
  dec bullet
  move object BulletObj,0.5
 endif

 rem Bullet dies
 if bullet=0
  set bsp collision off 2
 endif

else
 rem Gun recharge phase
 if bullet>-50 then dec bullet
endif

CLICK HERE TO RETURN TO THE MAIN MENU